﻿//
//  Monkey Manager
//  Copyright (C) 2012 Victor Tereschenko
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//     
// ========================================================================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ManagerDB
{
    /// <summary>
    /// Scans forlder for items.
    /// </summary>
    class FolderScanner
    {
        public static List<StoredFile> Scan(string folder)
        {
            FolderScanner scaner = new FolderScanner();
            return scaner.scan(folder);
        }

        private FolderScanner()
        {
            mFiles = new List<StoredFile>();
        }
        List<StoredFile> mFiles;

        /// <summary>
        /// Scans folder and adds all found items into mFiles
        /// </summary>
        /// <param name="folder"></param>
        private List<StoredFile> scan(string folder)
        {
            var directories = Directory.GetDirectories(folder);
            foreach (string dir in directories)
            {
                scan(dir);
            }
            var description = readDescriptions(folder);
            if (description.Length > 0)
                mFiles.AddRange(description);

            return mFiles;
        }

        /// <summary>
        /// Reads descriptions from folder.
        /// </summary>
        /// <param name="folder"></param>
        /// <returns>File descriptions. If the folder doesn't contain description then the empty array will be returned.</returns>
        private StoredFile[] readDescriptions(string folder)
        {
            string[] files = Directory.GetFiles(folder, "*.mmdesc");
            if (files.Length == 0)
                return new StoredFile[0];

            List<StoredFile> readFiles = new List<StoredFile>();
            foreach (string file in files)
            {
                try
                {
                    var description = DescriptionFileReader.Read(file);
                    if (description != null)
                        readFiles.Add(description);
                }
                catch (DescriptionFileReader.IncorrectFormatExceotion)
                {
                }
            }

            return readFiles.ToArray();
        }
    }
}
